package com.example.reptile.article;

/**
 * @ClassName Test
 * @Description TODO
 * @Author hf
 * @Date 2022/12/26 10:16
 * @Version 1.0
 */

import org.jsoup.Connection;
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
import org.jsoup.select.Elements;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;

public class ArticleTest {
    public static void main(String[] args) throws IOException {
        //设置下载文件存放磁盘的位置
        File file = new File("C:\\Users\\Administrator\\Desktop\\yn_ry");
        //判断文件夹是否存在，不存在就创建
        if (!file.exists()) {
            file.mkdirs();
        }
        //规定要爬取的网页
        String url = "https://www.xuanshu8.org/txt/77566.html";
        Connection conn = Jsoup.connect(url);
        //伪装成为浏览器，有的网站爬取数据会阻止访问，伪装成浏览器可以访问，这里我伪装成Google浏览器
        Document doc = conn.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36").get();
        //寻找名叫panel-body的div，接着再在里面寻找叫list-group.list-charts的ul，再在里面寻找li，再在li里寻找a
        Elements as = doc.getElementById("readerlist").select("ul li a");
        for (int i = 0; i < 5; i++) {
            //对于每一个元素取出拿到href和小说名字
            String href = as.get(i).attr("href");
            String title = as.get(i).text();
            //file:表示存放文件的位置
            //href:表示要读取内容的页面
            //title:表示存放文件名称
            save(file, href, title);
        }

    }

    private static void save(File file, String href, String title) throws IOException {
        //在file目录下创建每一个章命名的txt文件
        File f = new File(file, title + ".txt");
        //构建输出流对象，因为小说的内容是字符类型的数据
        Writer out = new FileWriter(f);
        //构建读取页面的url
        String url = "https://www.xuanshu8.org" + href;
        Connection conn = Jsoup.connect(url);
        //伪装成为浏览器
        Document doc = conn.header("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/89.0.4389.128 Safari/537.36").get();
        //获取小说的正文
        String content = doc.getElementById("content").select("p").html();
        //处理特殊数据
        content = content.replace("<br>", "");
        content = content.replace("&nbsp;", "");
        out.write(content);
        out.close();
        //需要使用休眠，为了防止网站检测为蓄意攻击，停止我们的IP访问

        int n = (int) (Math.random() * 1000 + 100);
        try {
            Thread.sleep(n);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

